导语

突然想把实验吧一些好的难度又不是特别大的misc整理一下,与大家共享

ROT-13 变身了

拿到的是一串数字 第一反应就是10进制转字符串

1
2
3
4
5
a='83 89 78 84 45 86 96 45 115 121 110 116 136 132 132 132 108 128 117 118 134 110 123 111 110 127 108 112 124 122 108 118 128 108 131 114 127 134 108 116 124 124 113 108 76 76 76 76 138 23 90 81 66 71 64 69 114 65 112 64 66 63 69 61 70 114 62 66 61 62 69 67 70 63 61 110 110 112 64 68 62 70 61 112 111 112'
a=a.split(' ')
b=[chr(int(i)-13) for i in a]
b=''.join(b)
print b

得到一串
FLAG IS flag{www_shiyanbar_com_is_very_good_????}
MD5:38e4c352809e150186920aac37190cbc
接下来便是四位的爆破匹配md5值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import hashlib
m='38e4c352809e150186920aac37190cbc'
c=r"""@#$%^&*()_+-={}[]|\:;"'<>?,.`~!/9876543210ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz"""
def compare():
for i in c:
for j in c:
for k in c:
for l in c:
a='flag{www_shiyanbar_com_is_very_good_'+i+j+k+l+'}'
print a
Md5=hashlib.md5()
Md5.update(a)
Md5_num=Md5.hexdigest()
if m==Md5_num:
return a
if __name__=='__main__':
result=compare()
print result

要有耐心

解码磁带

第一眼看上去像摩尔斯电码,试了一下和北京对不上,后来猜测是二进制,果然是可以的。注意究竟哪个是0哪个是1
老规矩,上脚本

1
2
3
4
5
6
7
8
9
10
11
f=open('test.txt','r')
a=[]
line=f.readline().strip('\n').replace('o','1').replace('_','0')
a.append(line)
while line:
line=f.readline().strip('\n').replace('o','1').replace('_','0')
a.append(line)
d=''
for i in a:
d+=chr(int(i,base=2))
print d

有趣的文件

打不开,于是放进hex编辑器里面发现什么都不是,抱着试试看得心里去百度搜了一下文件头发现,这个头是没有,他的变形倒是有,原来是把两位倒过来了,这个脚本也是看别人的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def revStr(s):
news=""
for i in xrange(0,len(s),4) :
news+=s[i+2:i+4]
news+=s[i:i+2]
return news
def foo():
f=open('funfile','r')
s="377a"
for line in f:
s+=revStr(line.strip()[8:].replace(' ',""))
print s
fsave=open('fun.7z','wb')
fsave.write(s.decode('hex'))
fsave.close()
pass
if __name__ == '__main__':
foo()
print 'finished'

生成的文件再放进hex编辑器,不管是什么东西,反正里面有flag

异性相吸

这道题也是很有意思,两个文件,一个文件是乱码,让人看上去很懵逼,但是这其实也是经验问题,可疑的乱码的产生往往是异或运算造成的,尝试两个文件的异或

1
2
3
4
5
6
7
a=open('key2.txt','rb').read()
b=open('key1.txt','rb').read()
n=''
for i in range(len(a)):
r=ord(list(a)[i])^ord(list(b)[i])
n+=chr(r)
print n

A记录

这是一道wifi包破解的问题,利用的是kail里面的aircrack-ng,具体的方法如下

首先是 aircrack-ng **.cap 得到包的信息 bssid essid

然后找到一个字典放在和包一起 aircrack-ng -a2 -b “bssid” -w 字典 包 破解其密码

最后 利用 essid 和password airdecap-ng -p 密码 -e essid 包 得到里面的传输信息

得到了一个shipin-dec.cap 然后去包里面寻找答案
过滤dns 找到A记录(也就是内容里以A开头的)试几次就得到答案了

sos

这道题目用到了我一直不知道怎么用的 binwalk -e sos 得到一个文件夹,里面有着一大堆文件夹,每个文件夹里面又有着一个文件data,每一个文件里有着一个字母,猜测是把文件中所有的字母拼起来组合成一段话,上脚本

1
2
3
4
5
6
7
8
9
10
11
def foo():
path="piliang/%d/data"
s=""
for i in xrange(1,242+1):
f=open(path % i).read()
s+=f
print s
pass
if __name__ == '__main__':
foo()
print 'ok'

雌黄出其唇吻

这道题很有迷惑性,每次出来的东西都不一样。每当web万般无奈之时想到的就是扫目录,结果发现了robots.txt,里面藏着有flag的地址

BAT公司信息查询系统

这道题让我知道了原来css里面还能藏着信息,原来从来没有访问css的意识
里面有一个图片地址,访问扫描又有一个文件地址,访问又有一个页面。这次里面是一个乱码,这也是一个难题,这个乱码代表什么?怎么才能让他显示成看得懂的东西。应该是编码问题,试着修改浏览器的编码,发现没有用,后来又放到了记事本里面另存为换编码,在记事本里面看还是没有变化,结果拖到hex编辑器里面发现显示出来了。至于为什么我现在也比太清楚,待日后解决。

sssssssss

这道题给的又是一个不着边的文件,什么特征都没有,结合之前做过的类似的题目大概有几种可能,一种就是,里面的顺序改了,另一种是异或了,显然这里是第二种,因为第一种文件头搜了一下啥信息都没有。和谁异或的?题目那么多s,就是他了

1
2
3
4
5
f=open('misc','rb').read()
p=open('m','wb')
for i in range(len(f)):
r=ord(list(f)[i])^ord('s')
p.write(chr(r))

only one file

这里面涉及到windows和linux的一些识别文件的区别,Linux似乎是通过文件头去判断一个文件的类型的,只要文件头对了,就会自动被判别为某个类型的文件,并且会自动区别显示。但是windows需要通过后缀来完成区别显示。因此在windows下显示为未知文件,放到Linux下就自动转化成了zip,解压,发现里面还有一大堆文件,其中第一个是图片,但是打不开。联想到刚刚分析的,和题目要求,我们猜测这些文件应该是一张图片分隔成的。那我们就要再拼回去。
cat file/* > 1.png 得到图片,后面再用专用的工具打开就可以了

2015RCTF(misc50)

这题给的是sqlmap的爆破记录,想必是让我们看出flag
可怕的是全部是url编码的,百度一下找到了别人写的脚本,批量解码,真的很厉害。

1
2
3
4
5
6
7
8
9
10
11
from urllib import unquote
import linecache
def get_urldecode(key):
a= unquote(key)
op_word_txt.write("%s\n"%a)
return key
if __name__=="__main__":
url_list = linecache.getlines('key.txt')
op_word_txt = open('jiegou.txt','a')
for x in url_list:
print get_urldecode(x.strip())

解出来那么就简单了,翻一番找到爆破flag字段的语句,用的是二分法,最后!=的就是对应的10进制数字,记录下来转一下字符串就行了,转字符串的脚本在之前已经给过,不再啰嗦。

女神

这里面是base64 解码看到了关键词png 知道了是图片,那么只要一句话就可以把它转化成功


open('nvshen.png','wb').write(open('nvshen.txt','rb').read().decode('base64'))

XDCTF misc200

拿到一个不知道是什么文件,丢到hex编辑器看一下,发现可能和虚拟机有关,但是也发现里面有压缩包,不管他,先用 binwalk -e 试一下,的确得到了好多东西,但是很多都是不能用的,不行,再用foremost 试一下,效果要好得多,得到了一切想要的东西。两个压缩包,一个加密一个不加密,两个压缩包有一样的东西,readme.txt查看md5校验的确是一个,所以明文攻击开始了。把readme.txt再压缩成一个没有密码的压缩包,然后用工具明文攻击就可以了